package de.previsor.workflow.control;

import de.previsor.workflow.*;
import de.previsor.workflow.model.*;
import de.previsor.workflow.control.helper.*;
import java.net.URL;
import java.security.NoSuchAlgorithmException;
import java.util.ResourceBundle;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;

/***
 * Klasse: LoginController regelt den Anmeldevorgang eines Nutzers
 * Dabei werden Emailadresse und Passwort mit der Datenbank abgeglichen.
 * Schlägt die Authentifizierung fehl, so wird eine Fehlermeldung ausgegeben
 * 
 * @author Michael Müller
 * Datum:  08.11.2014
 */
public class LoginController implements Initializable {
    
    // Datenfelder aus FXML
    @FXML private TextField inp_email;    
    @FXML private TextField inp_pass;     
    @FXML private Label lbl_fehler;
    
    /***
     * Ausführung nach Betätigung des LoginButtons
     * @param event
     * @throws NoSuchAlgorithmException 
     */
    @FXML
    private void LoginBtnAction(ActionEvent event) throws NoSuchAlgorithmException {
    
    boolean userExist = false;        
    String fehler = "";                 // Fehlermeldung aufnehmen
    String email = inp_email.getText();	// Wert der als Email übergeben wurde
    String pass = inp_pass.getText(); 	// Wert der als Passwort übergeben wurde		

	/*
	* Überprüfung ob Nutzer und Passwort in den Datenbank vermerkt sind
	*/
        DBConnect conAuth = new DBConnect();
	if (conAuth.authenticate(email, pass)) 
        {
            // Verbindungsaufbau DB, holt sich die UserID
            DBConnect conUser = new DBConnect(); 
            int Uid = conUser.getUserID(email);
            
            
            // Holt sich die Daten des angemeldeten User            
            String[] userData = conUser.getUserData(Uid);
            // erzeugt neuen User                       
            Mitarbeiter m = new Mitarbeiter(userData); 	
            /* Hinterlegt den Mitarbeiter im System, sodass
            *  dieser nicht ständig erfragt werden muss
            */
            InitData.startInit(m);
            
	   // Erzeugung der nächsten Programminstanz 
           MainApp.showPrevisorUiWorkflow();
           StateData.setLogin(true);
           System.out.println(StateData.getLogin());
           //RootController.tester();
          
           /***
            * Versuche den Workflow und Assetbutton auszublenden, wenn der User noch nicht
            * im Programm eingeloggt ist
            * Autoren: Robert Kelle, Michael Müller
            */
           /*RootController.makeVisible();
           try{
           BorderPane root = (BorderPane) FXMLLoader.load(MainApp.class.getResource("view/RootLayout.fxml")); 
           
           Button workflowButton = (Button) root.lookup("#btn_workflow");
           workflowButton.setVisible(false);
           Button assetButton = (Button) root.lookup("#btn_asset");
           assetButton.setVisible(false); 
               
           }catch(Exception e)
           {
               e.printStackTrace();
               System.out.println("Loginprozess - Rootlayout konnte nicht geladen werden");
           }*/
	   
        /*
         *Alternativen zum korrekten USER
         */
        } else {
            if (email.equals("") || pass.equals("")) {
                fehler = "Keine Email bzw. Passwort angegeben.";
                clearFields(); // leert das User- und Passwort-Eingabefeld
            }
            if (!userExist && !email.equals("") && !pass.equals("")) 
            {
               fehler = "Eingegebene Daten sind nicht korrekt.";
               clearFields(); // leert das User- und Passwort-Eingabefeld
            }
        }					
    // Fehlerausgabe, wenn vorhanden    
    if( !fehler.isEmpty())
    {
        lbl_fehler.setVisible(true);
        lbl_fehler.setText(fehler);
    }
     
} // END - LoginBtnAction
    	
    /***
    * löscht den Text des Passwortfeldes bei fehlerhafter Anmeldung
    */
    public void clearFields() 
    {
	inp_pass.setText("Password");
        inp_email.setText("Emailadresse");
    } 
    
    
    @Override
    public void initialize(URL url, ResourceBundle rb) {
        // TODO
    }    
    

} // END  - LoginController

    
